
import execjs
import requests

session = requests.session()

with open('parse/1.去哪儿.js', 'r', encoding='utf-8') as f:
    js_str = f.read()
    js_code = execjs.compile(js_str)


import time

def generate_slider_trajectory(
        num_points: int = 36,  # 轨迹点数量（默认与示例一致）
        start_x: float = 71.0,  # X轴起始位置（默认与示例一致）
        end_x: float = 498.0,  # X轴结束位置（默认与示例一致）
        y_position: float = 261.0,  # Y轴固定位置（默认与示例一致）
        start_timestamp: int = 74644,  # 起始时间戳（默认与示例一致）
        base_time_interval: int = 20  # 基础时间间隔（毫秒，默认与示例平均间隔接近）
) -> list[str]:
    """
    生成滑块验证码轨迹列表，格式与示例完全一致：["timestamp;x;y;distance", ...]

    参数说明：
        num_points: 轨迹点总数（示例为36个）
        start_x: 滑块起始X坐标（示例为71.0）
        end_x: 滑块结束X坐标（示例为498.0）
        y_position: 滑块Y坐标（示例基本固定为261.0左右，可微调）
        start_timestamp: 第一个轨迹点的时间戳（示例为74644）
        base_time_interval: 相邻轨迹点的基础时间间隔（毫秒，示例平均约21ms）

    返回：
        符合格式要求的轨迹字符串列表
    """
    trajectory = []
    # 总移动距离（X轴结束位置 - 起始位置，与示例总距离427.0一致）
    total_distance = end_x - start_x

    for i in range(num_points):
        # 1. 计算当前X坐标：模拟先加速后减速的自然运动（使用正弦函数平滑过渡）
        # 正弦函数在0~π区间的导数先正后负，符合"加速→减速"的人类操作习惯
        progress = i / (num_points - 1)  # 进度（0~1）
        x_offset = total_distance * (0.5 - 0.5 * math.cos(progress * math.pi))  # 平滑偏移
        current_x = start_x + x_offset

        # 2. 计算当前时间戳：基础间隔 + 小随机波动（模拟人类操作的时间不稳定性）
        # 波动范围：±3ms，避免时间间隔完全一致（示例中时间间隔有20/21/25ms等）
        time_fluctuation = random.randint(-3, 3)
        current_timestamp = start_timestamp + i * base_time_interval + time_fluctuation

        # 3. 计算当前累计距离：与X轴偏移量一致（因为Y轴无移动，总距离=X轴移动距离）
        current_distance = x_offset

        # 4. Y轴位置：基本固定，添加±1的微小波动（示例中Y轴在260~272之间小幅变化）
        y_fluctuation = random.randint(-1, 1)
        current_y = y_position + y_fluctuation

        # 5. 格式化字符串：时间戳（整数）+ 坐标（保留2位小数）+ 距离（保留2位小数）
        # 严格匹配示例格式："74644;71.00;261.00;1.00"
        point_str = f"{current_timestamp};{current_x:.2f};{current_y:.2f};{current_distance:.2f}"
        trajectory.append(point_str)

    return trajectory


# ------------------- 调用函数生成轨迹（与示例格式一致）-------------------
if __name__ == "__main__":
    import math
    import random

    # 生成与示例参数一致的轨迹（36个点、X轴71→498、Y轴261左右、起始时间戳74644）
    slider_trajectory = generate_slider_trajectory()

    # # 打印结果（与你提供的列表格式完全相同）
    # print("生成的滑块轨迹列表：")
    # print(slider_trajectory)

    # # 可选：验证格式是否正确（随机抽查一个轨迹点）
    # print("\n随机抽查一个轨迹点格式：")
    # sample_point = random.choice(slider_trajectory)
    # print(f"示例点：{sample_point}")
    # print(f"格式拆分：{sample_point.split(';')}")

# 1764074463266.145
# 1764074409816
# 1764074526022

# print(int(time.time()*1000))
# print(int(time.time()*1000)+1)
# print(generate_slider_trajectory())

now_time = int(time.time()*1000)
open_time = now_time-random.randint(2200,3500)
start_time = now_time-random.randint(1000, 1600)
sliderInfo = {
    "openTime": open_time,
    "startTime":start_time ,
    "endTime": now_time,
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
    "uid": "0000fe80254076dfe8303f5e",
    "track": [
        "33048;147.00;344.00;1.00",
        "33069;148.00;343.00;2.00",
        "33089;157.00;342.00;11.00",
        "33109;182.00;342.00;36.00",
        "33129;247.00;342.00;101.00",
        "33149;341.00;342.00;195.00",
        "33169;451.00;342.00;305.00",
        "33189;558.00;342.00;412.00"
    ],
    "acc": [],
    "ori": [],
    "deviceMotion": [
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        },
        {
            "isTrusted": True
        }
    ]
}




post_data = js_code.call("encryption", sliderInfo)

print(post_data,type(post_data))
# print()

url = "https://vercode.qunar.com/inner/captcha/snapshot"


res = session.post(url, data={
    "data": post_data,
    "orca": 2,
    "appCode":"register_pc",
    "cs":"pc"
})


print(res,res.json())


